package delphorm.dao.tests;

import java.util.Date;
import java.util.Properties;

import junit.framework.Assert;
import junit.framework.TestCase;

import org.hibernate.SessionFactory;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.orm.hibernate3.LocalSessionFactoryBean;

import delphorm.dao.personne.ImplHibernateGroupeCollectif;
import delphorm.dao.personne.ImplHibernateUtilisateur;
import delphorm.dao.questionnaire.ImplHibernateQuestionnaire;
import delphorm.entite.personne.DroitQuestionnaire;
import delphorm.entite.personne.GroupeCollectif;
import delphorm.entite.personne.Utilisateur;
import delphorm.entite.questionnaire.Question;
import delphorm.entite.questionnaire.Questionnaire;
import delphorm.entite.questionnaire.ReponseFermee;
import delphorm.entite.questionnaire.ReponseOuverte;
import delphorm.entite.questionnaire.ValeurFichier;
import delphorm.entite.questionnaire.ValeurNumerique;
import delphorm.entite.questionnaire.ValeurTexte;

//crée un questionnaire sans question, avec droits sur les groupes.
public class testCreerQuestionnaire3 extends TestCase {
	
	LocalSessionFactoryBean sessionFactory;
	DriverManagerDataSource datasource;
	ImplHibernateUtilisateur daoutilisateur;
	ImplHibernateQuestionnaire daoquestionnaire;
	ImplHibernateGroupeCollectif daogroupe;
	
	public static void main(String[] args) {
	}

	protected void setUp() throws Exception {
		super.setUp();
		datasource = new DriverManagerDataSource();
		datasource.setDriverClassName("org.postgresql.Driver");
		datasource.setUsername("admin");
		datasource.setPassword("admin");
		datasource.setUrl("jdbc:postgresql://localhost:5432/autoformdb");
		
		sessionFactory = new LocalSessionFactoryBean();
		sessionFactory.setDataSource(datasource);
		String[] fichiersmapping = new String[]{
				"mapping/utilisateur.hbm.xml",
		        "mapping/groupe.hbm.xml",
		        "mapping/groupecollectif.hbm.xml",
		        "mapping/droitQuestionnaire.hbm.xml",
		        "mapping/groupeutilisateur.hbm.xml",
		        "mapping/droitGroupe.hbm.xml",
		        "mapping/question.hbm.xml",
		        "mapping/questionnaire.hbm.xml",
		        "mapping/reponse.hbm.xml",
		        "mapping/reponseOuverte.hbm.xml",
		        "mapping/reponseFermee.hbm.xml",
		        "mapping/valeur.hbm.xml",
		        "mapping/valeurTexte.hbm.xml",
		        "mapping/valeurNumerique.hbm.xml",
		        "mapping/valeurFichier.hbm.xml",
		        "mapping/filtre.hbm.xml",
		        "mapping/filtreNumerique.hbm.xml",
		        "mapping/filtreTexte.hbm.xml"
		};
		sessionFactory.setMappingResources(fichiersmapping);
		Properties prop = new Properties();
		prop.put("hibernate.dialect","org.hibernate.dialect.PostgreSQLDialect");
		prop.put("current_session_context_class","thread");
		prop.put("show_sql","true");
		sessionFactory.setHibernateProperties(prop);
		sessionFactory.afterPropertiesSet();
		SessionFactory sf = (SessionFactory) sessionFactory.getObject();
		
		daoutilisateur = new ImplHibernateUtilisateur();
		daoutilisateur.setSessionFactory(sf);
		
		daoquestionnaire = new ImplHibernateQuestionnaire();
		daoquestionnaire.setSessionFactory(sf);
		
		daogroupe = new ImplHibernateGroupeCollectif();
		daogroupe.setSessionFactory(sf);
	}
	
	public void testCreerQuestionnaireSimple()
	{
			//charge un utilisateur
			String login = new String("jerome");
			Utilisateur utilisateur = daoutilisateur.getUtilisateurParLogin(login);
			Assert.assertNotNull(utilisateur);
			Assert.assertNotNull(utilisateur.getId());
			
			//crée un questionnaire
			Questionnaire q = new Questionnaire();
			q.setDateCreation(new Date());
			q.setDateModification(new Date());
			q.setEtat(new Character('W'));
			q.setTitre(new String("Aéro smitteu"));
			q.setAuteur(utilisateur);
			
			//change quelques droits proprietaire
			DroitQuestionnaire dq = q.getDroitsPropriétaire();
			dq.setCreerInstanceQuestionnaire(new Boolean(true));
			
			//change quelques droit autres
			dq = q.getDroitsAutres();
			dq.setCreerInstanceQuestionnaire(new Boolean(true));
			
			//crée un droit groupe
//			crée un droit pour un groupe
			dq = q.getNouveauDroitGroupe();
			
			//récupère un groupe collectif
			String nom = "groupetestcollectif2";
			GroupeCollectif groupe = daogroupe.getGroupeByNom(nom);
			Assert.assertEquals(groupe.getNom(), "groupetestcollectif2");
			
			//assigne le groupe au droit groupe
			dq.setGroupe(groupe);
			//change quellques droits
			dq.setCreerInstanceQuestionnaire(new Boolean(true));
			
			
//			crée 1 question
			Question question = new Question();
			question.setConsigne("consigne");
			question.setIntitule("intitule");
			question.setMaxReponses(new Integer(1));
			question.setMinReponses(new Integer(1));
			question.setOrdonnee(new Boolean(false));
			
			//crée une réponse ouverte numérique
			ReponseOuverte reponse = new ReponseOuverte();
			reponse.setIntitule("ouv numerique");
			reponse.setType("ouverte");
			reponse.setTypeDeDonnees(new Character('N'));
			question.getReponses().add(reponse);
			
//			crée une réponse ouverte texte
			reponse = new ReponseOuverte();
			reponse.setIntitule("ouv texte");
			reponse.setType("ouverte");
			reponse.setTypeDeDonnees(new Character('T'));
			question.getReponses().add(reponse);
			
//			crée une réponse ouverte fichier
			reponse = new ReponseOuverte();
			reponse.setIntitule("ouv fichier");
			reponse.setType("ouverte");
			reponse.setTypeDeDonnees(new Character('F'));
			reponse.setIntitule("foufou");
			question.getReponses().add(reponse);
			
			//crée une réponse fermée texte
			ReponseFermee reponseF = new ReponseFermee();
			reponseF.setType("fermee");
			reponseF.setTypeDeDonnees(new Character('T'));
			ValeurTexte vt = new ValeurTexte();
			vt.setValeur("une valeur");
			reponseF.setValeur(vt);
			question.getReponses().add(reponseF);
			
//			crée une réponse fermée numérique
			reponseF = new ReponseFermee();
			reponseF.setType("fermee");
			reponseF.setTypeDeDonnees(new Character('N'));
			ValeurNumerique vn = new ValeurNumerique();
			vn.setValeur(new Double(66));
			reponseF.setValeur(vn);
			question.getReponses().add(reponseF);
			
//			crée une réponse fermée fichier
			reponseF = new ReponseFermee();
			reponseF.setType("fermee");
			reponseF.setTypeDeDonnees(new Character('F'));
			ValeurFichier vf = new ValeurFichier();
			vf.setFichier(new byte[]{'a'});
			vf.setFilename("je suis un &é\"&é'\"'--è");
			vf.setNomFichier("pas drole &é'œ((--è_ççà)=$*");
			reponseF.setValeur(vf);
			question.getReponses().add(reponseF);
			
			
			//ajoute la question au questionnaire
			q.getQuestions().add(question);
			daoquestionnaire.enregistrerQuestionnaire(q);		
	}
}
